package cn.lx.elasticsearch.autocomplete.service;

import cn.lx.elasticsearch.autocomplete.dto.SuggestRequest;
import cn.lx.elasticsearch.autocomplete.dto.SuggestResponse;
import cn.lx.elasticsearch.autocomplete.entity.City;
import cn.lx.elasticsearch.autocomplete.entity.Product;
import cn.lx.elasticsearch.autocomplete.entity.User;

import java.util.List;

/**
 * 自动补全服务接口
 * 
 * @author lx
 * @since 2024-01-01
 */
public interface AutocompleteService {

    /**
     * 商品名称自动补全
     * 
     * @param request 请求参数
     * @return 建议结果
     */
    SuggestResponse<Product> suggestProducts(SuggestRequest request);

    /**
     * 城市名称自动补全
     * 
     * @param request 请求参数
     * @return 建议结果
     */
    SuggestResponse<City> suggestCities(SuggestRequest request);

    /**
     * 用户名称自动补全
     * 
     * @param request 请求参数
     * @return 建议结果
     */
    SuggestResponse<User> suggestUsers(SuggestRequest request);

    /**
     * 通用自动补全方法
     * 
     * @param request 请求参数
     * @return 建议结果
     */
    <T> SuggestResponse<T> suggest(SuggestRequest request, Class<T> clazz);

    /**
     * 批量添加商品数据
     * 
     * @param products 商品列表
     */
    void batchSaveProducts(List<Product> products);

    /**
     * 批量添加城市数据
     * 
     * @param cities 城市列表
     */
    void batchSaveCities(List<City> cities);

    /**
     * 批量添加用户数据
     * 
     * @param users 用户列表
     */
    void batchSaveUsers(List<User> users);

    /**
     * 初始化测试数据
     */
    void initTestData();
}
